package com.zmn.oms.zmn.business.interfaces.work;

import com.zmn.oms.common.dro.normal.order.OrderIncomeDetailDRO;
import com.zmn.oms.common.exception.OmsBaseException;
import com.zmn.oms.model.entity.work.OrderWorkQuery;
import com.zmn.base.oms.common.model.es.orderwork.EsOrderWork;
import com.zmn.oms.model.vo.warning.ZsWarningVO;
import com.zmn.oms.model.vo.work.ZsOrderWorkServiceItemExportVO;
import com.zmn.oms.model.vo.work.ZsOrderWorkVO;
import com.zmn.oms.model.vo.work.detail.ZsOrderWorkDetailVO;

import java.util.List;
import java.util.Map;

/**
 * 类描述：啄木鸟工单 b service
 *
 * @author lujia
 * @date 2018/12/03 17:03
 */
public interface ZsOrderWorkQueryBService {

    /**
     * 查询工单详情
     *
     * @param orderId 订单Id
     * @param workId  工单Id
     * @return 详情
     */
    ZsOrderWorkDetailVO findOrderWorkDetail(Long orderId, Long workId);

    /**
     * 查询工单收入详情
     *
     * @param orderId 订单Id
     * @param workId  工单Id
     * @return 详情
     */
    OrderIncomeDetailDRO findOrderIncomeDetail(Long orderId, Long workId);

    /**
     * 通过外部工单号查询工单
     * @param outerId 外部订单Id，必需
     * @param channelId 渠道Id，可以为null
     * @return 如果没查到，则返回null
     */
    ZsOrderWorkVO findOrderWorkByOuterId(String outerId, Integer channelId);

    /**
     * 通过外部工单号查询工单
     * @param outerId 外部订单Id，必需
     * @param channelIdList 渠道ID列表，限定在列表给出的渠道中查找，可以为null
     * @return 如果没查到，则返回null
     */
    ZsOrderWorkVO findOrderWorkByOuterIdAndChannelIds(String outerId, List<Integer> channelIdList);

    /**
     * 通过外部工单号查询ES工单
     * @param outerId 外部订单Id，必需
     * @param channelId 渠道Id，可以为null
     * @return 如果没查到，则返回null
     */
    EsOrderWork findEsOrderWorkByOuterId(String outerId, Integer channelId);

    /**
     * 通过外部工单号查询ES工单
     * @param outerId 外部订单Id，必需
     * @param channelIdList 渠道ID列表，限定在列表给出的渠道中查找，可以为null
     * @return 如果没查到，则返回null
     */
    EsOrderWork findEsOrderWorkByOuterIdAndChannelIds(String outerId, List<Integer> channelIdList);

    /**
     * 动态查询数据库
     * @param query
     * @return
     */
    Map<String, Object> findDynamicOrderWorkInfo(com.zmn.oms.common.dio.normal.order.OrderWorkQuery query) throws OmsBaseException;

    /**
     * 分页查询工单
     *
     * @param query 工单查询条件
     * @return 工单列表查询
     */
    List<ZsOrderWorkVO> listPageOrderWorkByQuery(OrderWorkQuery query);

    /**
     * 分页查询工单(无需记录查询记录)
     *
     * @param query 工单查询条件
     * @return 工单列表查询
     */
    List<ZsOrderWorkVO> listPageOrderWorkByQueryNoRecord(OrderWorkQuery query);

    /**
     * 查询工单数量
     *
     * @param query 工单查询条件
     * @return 工单数量查询
     */
    Integer countOrderWorkByQuery(OrderWorkQuery query);

    /**
     * 查询条件处理
     *
     * @param query
     */
    void processWorkQuery(OrderWorkQuery query);

    /**
     * 导出工单列表
     *
     * @param query 工单查询条件
     * @return 下载 url
     */
    List<EsOrderWork> exportListOrderWorkByQuery(OrderWorkQuery query);

    /**
     * 查询工单警告
     * @param esOrderWorks
     * @return
     */
    Map<Long, ZsWarningVO> listWarningByWorkList(List<EsOrderWork> esOrderWorks);

    /**
     * 转换为服务项导出VO
     * @param orderWorkList
     * @return
     */
    List<ZsOrderWorkServiceItemExportVO> converterOrderWorkServiceItemExportVO(List<EsOrderWork> orderWorkList);

    /**
     * 处理用户权限
     * @param detailVO
     */
    void processUserInfoPermiss(ZsOrderWorkDetailVO detailVO, Integer moduleId);
}
